Comparisons to Related Work

WCL is clearly related to other Lisp-to-C translators such as KCL, Scheme->C [#!s2c!#], Chestnut Software's Lisp translator, and Ibuki's CONS system. However, WCL differs from these systems not only in the runtime model that it uses for translating Lisp to C, but also in its approach to delivering applications. Of these systems, Chestnut and Ibuki seem to have done the most work directed towards producing an efficient delivery environment. However, these systems take a fundamentally different approach than WCL toward solving the delivery problem because they choose to statically link a standalone executable.

An earlier version of WCL also supported static linking with a library from which applications could extract only the code they required. However, static linking was eventually abandoned because the Lisp library is too intertwined to easily produce small binaries without excessive intervention on the part of the programmer. This intervention requires the programmer to assist the Lisp system in determining what parts of Lisp will not be required at runtime. Not only is this intervention cumbersome and error prone, but it draws a sharp distinction between the development environment and the delivery environment - a distinction C programmers do not encounter. Furthermore, no matter how small a statically linked executable becomes, it can never share code or data with related applications, and thus multiple applications are doomed to duplicate large pieces of common information, just as we saw in the statically linked xcalc example given earlier.

All of these problems with static linking led to the adoption of dynamic linking with a shared library in WCL. Using dynamic linking, there is virtually no difference between the development system and the delivery system because all language features are available to an application. Furthermore, WCL applications benefit from the sharing between applications that is inherent in shared libraries. WCL also appears to be the only Lisp system that uses the same debugger as C and other foreign languages. This combination of features allows WCL to provide a tighter and more efficient integration of Lisp with main stream computing.